﻿using ExcellentProjectPlus.Seguridades.Servicios.Docentes;
using ExcellentProjectPlus.Dominio.Seguridades.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace ExcellentProjectPlus.Seguridades.Docentes
{
    public class ServicioDeGestionDeDocentes : IServicioDeGestionDeDocentes
    {
        #region Propiedades
        IServicioDeAdministracionDeDocentes _servicioDeAdministracionDeDocentes;
        #endregion

        #region Constructores
        public ServicioDeGestionDeDocentes(IServicioDeAdministracionDeDocentes servicioDeAdministracionDeDocentes)
        {
            _servicioDeAdministracionDeDocentes = servicioDeAdministracionDeDocentes;
        }
        #endregion

        public IEnumerable<Docente> ObtenerDocentes()
        {
            IEnumerable<Docente> resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeDocentes.ObtenerDocentes();
                transaccion.Complete();
            }

            return resultado;
        }

        public Docente ObtenerDocentePorId(int id)
        {
            Docente resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadCommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeDocentes.ObtenerDocentePorId(id);
                transaccion.Complete();
            }
            return resultado;
        }

        public void AgregarDocente(Docente docente)
        {
            _servicioDeAdministracionDeDocentes.AgregarDocente(docente);
        }
        public void ModificarDocente(Docente docente)
        {
            _servicioDeAdministracionDeDocentes.ModificarDocente(docente);
        }
        public void EliminarDocente(Docente docente)
        {
            _servicioDeAdministracionDeDocentes.EliminarDocente(docente);
        }

        public Docente ObtenerDocentePorNombreUsuario(string usuario)
        {
            return _servicioDeAdministracionDeDocentes.ObtenerDocentePorNombreUsuario(usuario);
        }
    }
}
